package archer.framework.utils;


import archer.framework.core.ArcherCoreModule;
import archer.framework.utils.validator.EmailValidator;
import archer.framework.utils.validator.InetAddressValidator;
import jodd.util.StringUtil;

import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Map;


/**
 * 校验工具类
 *
 * @author christ
 * @date 2014年9月3日
 */
public class ValidateUtils {

    /**
     * 空校验
     * <li> 如果value为null返回true
     * <li> 如果value是String类型，如果其中包含的是空白字符则返回true
     * <li> 如果value是Collection类型，如果内容为空则返回true
     * <li> 如果value是Map类型，如果内容为空则返回true
     * <li> 如果value是Array类型，如果长度为0则返回true
     *
     * @param value
     * @return
     * @author christ
     * @date 2014年9月3日 下午2:59:46
     */
    public static boolean isEmpty(Object value) {

        return !isNotEmpty(value);
    }

    /**
     * 不为空校验
     * <li> 如果value为null返回false
     * <li> 如果value是String类型，如果其中包含的是空白字符则返回false
     * <li> 如果value是Collection类型，如果内容为空则返回false
     * <li> 如果value是Map类型，如果内容为空则返回false
     * <li> 如果value是Array类型，如果长度为0则返回false
     *
     * @param value
     * @return
     * @author christ
     * @date 2014年9月3日 下午3:02:40
     */
    public static boolean isNotEmpty(Object value) {

        if (value == null) {
            return false;
        }

        if (value instanceof String) {
            return !StringUtil.isBlank((CharSequence) value);
        }

        if (value instanceof Collection) {
            return !((Collection<?>) value).isEmpty();
        }

        if (value instanceof Map) {
            return !((Map<?, ?>) value).isEmpty();
        }

        if (value.getClass().isArray()) {
            return Array.getLength(value) != 0;
        }
        return true;
    }

    public static boolean isEmail(String email) {

        return EmailValidator.getInstance().isValid(email);
    }

    public static boolean isNotEmail(String email) {

        return !isEmail(email);
    }

    public static boolean isMobile(String mobile) {

        return ArcherCoreModule.mobilePattern.matcher(mobile).matches();
    }

    public static boolean isNotMobile(String mobile) {

        return !isMobile(mobile);
    }

    public static boolean isNetAddress(String address) {

        return InetAddressValidator.getInstance().isValid(address);
    }

    public static boolean isNotNetAddress(String address) {

        return !isNetAddress(address);
    }

    public static boolean isNet4Address(String address) {

        return InetAddressValidator.getInstance().isValidInet4Address(address);
    }

    public static boolean isNotNet4Address(String address) {

        return !isNet4Address(address);
    }

}